Jakub Kosterna - pd 3

Warsztaty Badawcze 2021: XAI-1

0. Przygotowanie pakietów, modelu, zbiorów treningowego i testowego, itp.

Potrzebne biblioteki

Przygotowanie zbioru danych oraz datasetów treningowego i testowego

Wczytanie modelu

1. Predykcja modelu dla wybranej obserwacji

Wylosowana obserwacja o indeksie 42 wydaje się być całkiem standardowa - model na 82% przewidywał dobrą jakość wina... i miał rację.

2. Dekompozycja wybranej obserwacji używając profili Ceteris Paribus/ ICE

Wywołanie

Podsumowanie i wnioski [4a]

🍷 Powyższe wykresy generalnie zdają się być raczej chaotyczne i Ceteris Paribus na pierwsze parę rzutów oka zaskakuje.

🍷 Interesująca zdaje się już pierwsza wizualizacja - kwasowość stała dla wartości większych niż 7.1 w przypadku wiersza 42. zawsze delikatnie skacze wokół 80% szans na wino jakościowe, przy czym robi to dosyć nieregularnie. Przy mniejszej wartości zmiennej szansa na pozytywną predykcję oceny wina byłaby nieco mniejsza, ale nieznacznie. Tak czy inaczej nie jest to kolumna, której modyfikacja wartości dla tego konkretnego przypadku dużo by zmieniła.

🍷 Bardziej typową sytuację widzimy dla kwasowości zmiennej - tu wraz ze wzrostem ocena by malała; przy czym dla wartości od ok. 1 predykcja owocowałaby minimalnie we wskazanie wina złego wg. ekspertów. Największy spadek można zaobserwować około 0.85 acidity - spadek predykcji ~20% na odcinku parunastu setnych współczynnika! Interesujące, że po osiągnięciu pułapu ~1.1 predykcja zatrzymuje się na stałym poziomie 0.462.

🍷 Kwas cytrynowy jeszcze ciekawszy! Tu widzimy regularny spadek od naszej wartości bliskiej zera aż do 0.6... a potem ni stąd, ni zowąd - nagły ogromny wzrost. W tym konkretnym wypadku największą predykcją otrzymujemy zarówno dla wartości bardzo dużych, jak i bardzo małych (!!).

🍷 Wreszcie nieodfermentowany cukier póki co najmniej ciekawy. Jest to kolumna niemalże niemająca wpływu na wynik predykcji obserwacji. Obserwujemy tu niemalże bez zmian tę samą wartość, która dla większości potencjalnych wartości zostaje taka sama lub nieznacznie maleje, za wyjątkiem wzrostu na około ósemce i turbulencjach przy stosunkowo najmniejszych wartościach.

🍷 Dla siarczanów mamy niemalże wszystko w pakiecie! Odcinek stały, część gwałtownych skoków, parę bardziej regularnych zależności miejscami... do wyboru, do koloru. Tak czy inaczej także i tu nie udało by nam się tak zmanipulować, aby przez modyfikację pojedynczej kolumny uzyskać w efekcie wino złe - wartości predykcji oscylują między 0.714 a 0.94.

🍷 Wartości funkcji cząsteczek dwutlenku siarki niezwiązanych z innymi cząsteczkami cechują się bardzo małą wariancją pod względme nieregularności - można stwierdzić: najmniej znacząca zmienna w tym zestawie.

🍷 A całkowita zawartość dwutlenku siarki już baardzo ciekawa! Dla wartości 94 otrzymalibyśmy absolutnie pozytywną predykcję, zaś dla pozornie nie wiele większej - 111 - już absolutnie negatywną. W kontraście do kolumny analizowanej powyżej, tu mamy bezkonkurencyjnie najbardziej wpływową na predykcję - przynajmniej w kontekście manipulacji wartościami. Różnica wyniku największa ze wszystkich i co ciekawsze - mniej-więcej w połowie stawki analizowanych wartości.

🍷 Gęstość dosyć typowa. Zgodnie z intuicją z macierzą korelacji z targetem większa wartość systematycznie rezultuje w mniejszą szansę na pozytywny wynik, ale jak to nasz nieidealny XGBoost wraz z ekspertami, którzy są tylko ludźmi, zrobili - jest trochę nieregularności.

🍷 Odczyn roztworu pH? Właściwie patrz wyżej. Dosyć spodziewany rezultat, wpływ zaś na poziomie średnim. Tu dodatkowo mamy niestandardowy spadek na poziomie wartości ok. 3.6 - może nie tak spektakularny jak przy total sulfur dioxide, ale wciąż.

🍷 Zawartość siarczanów odpowiedzialnych za konserwowanie wina bardzo ładna - taka trochę krzywa ROC wyszła (: No, może za wyjątkiem spadku na około 0.84 wartości i paru innych mniej widocznych momentów. Raczej systematyczny wzrost, przy czym dosyć gwałtowny na początku, potem już coraz lżejszy i mniej śmiały. Trzeba by stosunkowo baardzo mało owych siarczanów, żeby model stwierdził, że eksperci negatywnie ocenią wino.

🍷 Mimo największej korelacji z targetem, nie mamy tu wcale takiego 100% pewnego wzrostu! Owszem, wraz z większym procentem alkoholu predykcja staje się wyższa i wyższa, ale maksimum bliskie jedynki osiąga między 11.5 a 13%. Dla wartości +13% dostajemy prawdopodobieństwo już około 90%. To dobry znak - potwierdza się z tym, co moja grupa znalazła w źródłach naukowych, że jednak co za dużo, to niedobrze.

🍷 Biorąc w całość: Ceteris Paribus daje radę i w efektywny [a także efektowny] sposób pokazuje naturę zmiennych i wpływ turbulencji na nie poszczególne na predykcję modelu. Zachwycające jest to, jak w każdym konkretnym wypadku został wygenerowany zupełnie inny wykres. Póki co subiektywnie moja ulubiona metoda poznana na tym przedmiocie!!

3. Dwie obserwacje ze zbioru danych, które mają różne profile CP

Podsumowanie i wnioski [4b]

🍷 W kontraście do id=42 to mamy styczność z winem bezdyskusyjnie złym - i to zarówno w opinii modelu, jak i ekspertów.

🍷 Widać to także na wykresach - w większości przypadków niezależnie od modyfikacji wartości, wszystkie predykcje oscylują wokół zera.

🍷 Różnicę widać chociażby patrząc na zawartość alkoholu - dla poprzedniego przykładu niezależnie od niej, wino i tak byłoby ocenione jako dobre [biorąc pod uwagę inne czynniki]. Tu zaś, dla pewnych wartości (między ok. 11.5 a 13% - co ciekawe taki sam przedział, dla którego id=42 byłoby niemalże na 100% wypredykowane jako pozytywne), manipulując tylko tą kolumną - końcowy binarny rezultat by się odwrócił.

🍷 Z drugiej strony zmiana całkowitej zawartości dwutlenku siarki, która dla pierwszej analizowanej obserwacji mogłaby mocno wpłynąć ne wynik predykcji - tu tak jak i większość rozpatrywanych kolumn, jako zmieniana jedna jedyna właściwie nie ma znaczenia.